class MyCircularQueue {
    public int[] elem;
    public int useSize;
    public int front;
    public int rear;


    public MyCircularQueue(int k) {
        this.elem=new int[k+1];
    }
    
    public boolean enQueue(int value) {
        if (isFull()){
            return false;
        }
        this.elem[rear]=value;
        //千万不能加加rear++;
        rear=(rear+1)%elem.length;
        return true;
    }
    
    public boolean deQueue() {
       if (isEmpty()){
           return  false;
       }

        front=(front+1)%elem.length;
       return true;
    }
    //获取对头元素
    public int Front() {
        if (isEmpty()){
            return  -1;
        }
        return elem[front];
    }
    //获取对尾元素
    public int Rear() {
        if (isEmpty()){
            return  -1;
        }
        /**\
         * int index = (rear==0)?elem.length-1:rear-1;
         * return elem[index];
         */
        if (rear==0){
            return elem[elem.length-1];
        }
        return elem[rear-1];
    }
    
    public boolean isEmpty() {
        return rear==front;
    }
    
    public boolean isFull() {
        if ((rear+1)%elem.length==front){
            return true;
        }
        return false;
    }
}
